﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//void test(int* arr)//参数写成指针形式,指针变量为数组首元素的类型
//{
//	printf("%d\n", *arr);
//}
//int main()
//{
//	int arr[5] = { 1,2,3,4,5};
//	test(arr);
//	return 0;
//}
//void test(int (*arr)[4]) //参数写成指针形式,指针变量为数组首元素的类型
//{
//
//}
//int main() {
//	int arr[3][4] = { {1,2,3,4},{2,3,4,5},{3,4,5,6,} };
//	test(arr);
//	return 0;
//}
//int main() {
//	int a = 10;
//	int* pa = &a;
//	int** ppa = &pa;
//	printf("%p %d", *ppa, **ppa);
//	return 0;
//}
//int main() {
//		int arr1[] = { 1,2,3,4 };
//		int arr2[] = { 2,3,4,5 };
//		int arr3[] = { 3,4,5,6 };
//		//数组名是数组⾸元素的地址，类型是int*，可以存放在parr数组中
//		int* parr[3] = { arr1, arr2, arr3 };
//		for (int i = 0; i < 3; i++)
//		{
//			for (int j = 0; j < 4; j++)
//			{
//				printf("%d ", parr[i][j]);
//			}
//			printf("\n");
//		}
//	return 0;
//}
//void test() {
//	printf("haha\n");
//}
//int main() {
//	void (*p1)() = &test;
//	void (*p2)() = test;
//	test();               //实际上test里存的就是函数的地址
//
//	(*p1)(1,2);       //我们通过对p1解引用也可以找到函数的地址，一样调用  
//
//	p2(1, 2);    //*是可以省略的，因为我们p2存放的就是函数的地址，与第一种调用没差
//
//	return 0;
//}
int main() {

	int (*parr1[3])();   //parr1 先和 [] 结合，说明 parr1是数组，数组的内容是int (*)() 类型的函数指针。
	                       

	return 0;
}